#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>



//我没有指明路径，那么就是当前路径
//#define FILE_NAME "log.txt"
#define FILE_NAME(number) "log.txt"#number

// 每一个宏，对应的数值，只有一个比特位是1，彼此位置不重叠
//#define ONE (1<<0) //0x1
//#define TWO (1<<1) //0x2
//#define THREE (1<<2) //0x4
//#define FOUR (1<<3)  //x08
//
//void show(int flags)
//{
//    if(flags & ONE)
//        printf("one\n");
//    if(flags & TWO)
//        printf("two\n");
//    if(flags & THREE)
//        printf("three\n");
//    if(flags & FOUR)
//        printf("four\n");
//}

int main()
{
    printf("stdin->fd:%d\n",stdin->_fileno);
    printf("stdout->fd:%d\n",stdout->_fileno);
    printf("sterr->fd:%d\n",stderr->_fileno);
    umask(0);
    // "w" -> O_WRONLY | O_CREAT | O_TRUNC,0666
    // "a" -> O_WRONLY | O_CREAT ,0666, O_APPEND
    //int fd = open(FILE_NAME,O_WRONLY | O_CREAT | O_TRUNC,0666);
    //int fd = open(FILE_NAME,O_WRONLY | O_CREAT | O_APPEND,0666);
    int fd0 = open(FILE_NAME(1),O_WRONLY | O_CREAT | O_TRUNC, 0666);
    int fd1 = open(FILE_NAME(2),O_WRONLY | O_CREAT | O_TRUNC, 0666);
    int fd2 = open(FILE_NAME(3),O_WRONLY | O_CREAT | O_TRUNC, 0666);
    int fd3 = open(FILE_NAME(4),O_WRONLY | O_CREAT | O_TRUNC, 0666);
    int fd4 = open(FILE_NAME(5),O_WRONLY | O_CREAT | O_TRUNC, 0666);
//    int fd = open(FILE_NAME,O_RDONLY);
//    if( fd < 0 )
//    {
//        perror("open");
//        return 1;
//    }
//    
//    char buffer[1024];
//    ssize_t num = read(fd, buffer , sizeof(buffer) - 1);
//    if( num > 0 )
//    {
//        buffer[num] = 0;// 0,\0,NULL -> 其实都是0,打印的时候，%s打印，需要以0结尾
//    }
//    printf("%s",buffer);


    //int cnt = 5;
    //
    //char outBuffer[64];
    //while( cnt )
    //{
    //    sprintf(outBuffer,"%s:%d\n","hello world",cnt--);
    //    write(fd,outBuffer,strlen(outBuffer));//向文件中写入string的时候，不要+1
    //}
    
    printf("fd0 : %d\n",fd0);
    printf("fd1 : %d\n",fd1);
    printf("fd2 : %d\n",fd2);
    printf("fd3 : %d\n",fd3);
    printf("fd4 : %d\n",fd4);
    //printf("fd : %d\n",fd);
    close(fd0);
    close(fd1);
    close(fd2);
    close(fd3);
    close(fd4);

//    // 细节问题
//    // 以w方式单纯的打开文件，c会自动的清空内部数据，
    
//    show(ONE);
//    printf("---------------------\n");
//    show(TWO);
//    printf("---------------------\n");
//    show(ONE | TWO);
//    printf("---------------------\n");
//    show(ONE | TWO | THREE);
//    printf("---------------------\n");
//    show(ONE | TWO | THREE | FOUR);
//    printf("---------------------\n");


//    // 0666 & ~umask
//    FILE *fp=fopen(FILE_NAME, "w");//r,w,r+(读写，不存在出错)，w+(读写，不存在创建),a(append,追加)，a+()
//    //FILE *fp=fopen(FILE_NAME, "r");//r,w,r+(读写，不存在出错)，w+(读写，不存在创建),a(append,追加)，a+()
//    //FILE *fp=fopen(FILE_NAME, "a");//r,w,r+(读写，不存在出错)，w+(读写，不存在创建),a(append,追加)，a+()
//    if(NULL == fp)
//    {
//        perror("fopen");
//        return 1;
//    }
//    
////    char buffer[64];
////    while(fgets(buffer,sizeof(buffer)-1,fp) != NULL)
////    {
////        buffer[strlen(buffer) -1] = 0;
////        puts(buffer);
////    }
//
//    int cnt = 5;
//    while(cnt)
//    {
//        fprintf(fp,"%s:%d\n","hello world",cnt--);
//    }
//
//    fclose(fp);
    return 0;
}
